// 引入JWT策略和请求提取工具以及用户模型
const JwtStrategy = require("passport-jwt").Strategy,
  ExtractJwt = require("passport-jwt").ExtractJwt,
  UserService = require("../services/UserService");

// 初始化配置对象
opts = {};
// 配置从请求头中提取JWT的方法
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
// 配置JWT的密钥
opts.secretOrKey = "贾公子";

// 配置passport使用JWT策略
module.exports = (passport) => {
  passport.use(
    new JwtStrategy(opts, async (jwt_payload, done) => {
      // 尝试根据JWT载荷中的用户ID查找用户
      try {
        let user = await UserService.findById(jwt_payload._id);
        if (!user) return done(null, false);
        return done(null, user);
      } catch (error) {
        console.log(error);
      }
    })
  );
};
